package com.thread.threadfirst.studyThread1;

import java.util.ArrayList;
import java.util.List;

/**
 * 11、volatile并不能保证多个线程同时修改同一个变量时的数据不一致问题，所以volatile不能替代synchronized
 */
public class T3 {
    //第一种
    volatile int count = 0;

    void m() {
        for (int i = 0; i < 10000; i++) {
            count++;
        }
    }

    //第二种
//    /*volatile*/ int count=0;
//
//    synchronized void m(){          //count的10000次加完了，再执行其他线程
//        for (int i=0;i<10000;i++){
//            count++;
//        }
//    }

    public static void main(String[] args) {
        T3 t3 = new T3();

        List<Thread> threads = new ArrayList();
        for (int j = 0; j < 10; j++) {
            threads.add(new Thread(t3::m, "t_" + j));
        }
        threads.forEach(x -> x.start());
        threads.forEach(x -> {
            try {
                x.join();       //这里的x.join()的作用是：等待所有子线程执行完后，再执行到下面的输出count，如果不加，子线程还未全部执行完就输出count了
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        System.out.println(t3.count);
    }
}
